/* Copyright (c) 2000-2006 hamcrest.org
*/
package org.hamcrest.core;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.IsEqual.equalTo;
import org.hamcrest.AbstractMatcherTest;
import org.hamcrest.Matcher;
public class IsEqualTest extends AbstractMatcherTest {
@Override
protected Matcher<?> createMatcher() {
return equalTo("irrelevant");
}
public void testComparesObjectsUsingEqualsMethod() {
assertThat("hi", equalTo("hi"));
assertThat("bye", not(equalTo("hi")));
assertThat(1, equalTo(1));
assertThat(1, not(equalTo(2)));
}
public void testCanCompareNullValues() {
assertThat(null, equalTo(null));
assertThat(null, not(equalTo("hi")));
assertThat("hi", not(equalTo(null)));
}
public void testHonoursIsEqualImplementationEvenWithNullValues() {
Object alwaysEqual = new Object() {
@Override
public boolean equals(Object obj) {
return true;
}
};
Object neverEqual = new Object() {
@Override
public boolean equals(Object obj) {
return false;
}
};
assertThat(alwaysEqual, equalTo(null));
assertThat(neverEqual, not(equalTo(null)));
}
public void testComparesTheElementsOfAnObjectArray() {
String[] s1 = {"a", "b"};
String[] s2 = {"a", "b"};
String[] s3 = {"c", "d"};
String[] s4 = {"a", "b", "c", "d"};
assertThat(s1, equalTo(s1));
assertThat(s2, equalTo(s1));
assertThat(s3, not(equalTo(s1)));
assertThat(s4, not(equalTo(s1)));
}
public void testComparesTheElementsOfAnArrayOfPrimitiveTypes() {
int[] i1 = new int[]{1, 2};
int[] i2 = new int[]{1, 2};
int[] i3 = new int[]{3, 4};
int[] i4 = new int[]{1, 2, 3, 4};
assertThat(i1, equalTo(i1));
assertThat(i2, equalTo(i1));
assertThat(i3, not(equalTo(i1)));
assertThat(i4, not(equalTo(i1)));
}
public void testRecursivelyTestsElementsOfArrays() {
int[][] i1 = new int[][]{{1, 2}, {3, 4}};
int[][] i2 = new int[][]{{1, 2}, {3, 4}};
int[][] i3 = new int[][]{{5, 6}, {7, 8}};
int[][] i4 = new int[][]{{1, 2, 3, 4}, {3, 4}};
assertThat(i1, equalTo(i1));
assertThat(i2, equalTo(i1));
assertThat(i3, not(equalTo(i1)));
assertThat(i4, not(equalTo(i1)));
}
public void testIncludesTheResultOfCallingToStringOnItsArgumentInTheDescription() {
final String argumentDescription = "ARGUMENT DESCRIPTION";
Object argument = new Object() {
@Override
public String toString() {
return argumentDescription;
}
};
assertDescription("<" + argumentDescription + ">", equalTo(argument));
}
public void testReturnsAnObviousDescriptionIfCreatedWithANestedMatcherByMistake() {
Matcher<? super String> innerMatcher = equalTo("NestedMatcher");
assertDescription("<" + innerMatcher.toString() + ">", equalTo(innerMatcher));
}
public void testReturnsGoodDescriptionIfCreatedWithNullReference() {
assertDescription("null", equalTo(null));
}
}